package day20180129.designMode.six_Prototype;

/**
 * Created by 14394 on 2018/1/29.
 */

/*
* 优点： 性能提高
*       逃避构造函数的约束
*
*       使用场景：  资源优化场景
*                  类初始化需要消耗较多资源的场景
*                  性能和安全要求的场景
*                  通过new产生对象需要非常繁琐的数据准备或访问权限的场景
*            注意事项：
*                 与通过实例化来构造新对象不同的是，原型模式通过拷贝现有对象生成新对象
*                 浅拷贝  实现Cloneable  重写
*                 深拷贝  实现Serializable 读取二 进制流
*              实际项目中很少单独使用，一般和工厂方法一起，由工厂方法提供给调用者
* */

public class Test {
    public static void main(String[] args) {
    //准备
    Manager manager = new Manager();
    UnderLinePen upen = new UnderLinePen('~');

    MessageBox mbox = new MessageBox('*');

    MessageBox sbox = new MessageBox('/');

    manager.register("strong message",upen);
    manager.register("warning box",mbox);
    manager.register("slash box",sbox);

    //生成

        Product p1 = manager.create("strong message");
        p1.use("hello,world.");
        Product p3 = manager.create("slash box");
        p3.use("hello,world.");

        Product p4 = manager.create("warning box");
        p4.use("hello,world.");

        Product p5 = manager.create("warning box");
        p5.use("hello,world.");

        Product p6 = manager.create("warning box");
        p6.use("hello,world.");

    }
}
